<?php namespace Common\Model;
use Hdphp\Model\Model;
//类型管理模型
class Goods extends Model{
	//指定表明固定写法
	protected $table = "goods";
	//框架验证
	protected $validate = array(
//		array('gname','required','商品名称不能为空',3,3),
//		array('gname','maxlen:30','商品名不得超过30个字符',3,3),
//		array('gunit','required','必须填写商品单位',3,3),
//		array('mkprice','required','必须填写市场价',3,3),
//		array('shopprice','required','必须填写商城价',3,3),
//		array('clickrate','required','必须填写点击次数',3,3),

		
	);
	//自动完成
	protected $auto = array(
		//3是必须处理的表单，1.是在插入时候处理
		//array(表单字段名,处理方法,方法类型,验证条件,处理时间)
		array('regtime','time','function',3,1),
		array('admin_aid','admin','method',3,1)
		
	);
	//处理字段admin_aid的方法，该方法返回什么，数据库就可以存入什么
	public function admin(){
	return $_SESSION['aid'];
	}
	//添加商品
	public function store(){
		//一，此处调用的是框架里的create方法，触发自动验证，
		//1.验证商品表的相应字段，如果验证失败
		//如果上传失败,给当前模型压入错误此时
		//$this->error就是一个字符串，存储一条错误信息
		if(!$this->create()){return false;}
		if($error = Upload::getError()){
			$this->error = $error;
			return false;
		}
		//2.验证商品详情表里的商品详情和商品服务是否通过
		//实例化商品详情表
		$detailModel = new \Common\Model\Goodsdetail;
		if(!$detailModel->create()){
			//若验证不通过，把当前错误压入当前模型
			$this->error = $detailModel->getError();
			return false;
		}		
		//3.验证商品属性表里的商品属性值是否通过验证
		//实例化商品属性表
		$attrModel = new \Common\Model\Goodsattr;
		//若验证不通过，把当前错误压入当前模型
		if(!$attrModel->create()){
			$this->error = $attrModel->getError();
//			return false;
		}
		//1.给商品表添加数据，如果以上验证全部通过,返回商品自增主键（真值）
		//根据提交过来的category_cid找到category表里的type_typid就找到了type表里的同一批的typid;
		$cid = Q('post.category_cid',0,'intval');
		//找到category表里的type_typid
		$typid = Db::table('category')->where("cid={$cid}")->pluck('type_typid');
		//压入数组
		$this->data['type_typid'] = $typid;
		//添加到数据库，返回自增主键
		$num = $this->add(); 
		//2.给商品详情表添加数据		
		//将多图的数组路径转化为字符串压入相应的商品详情数据的数组里然后执行添加
		$detailModel->data['gdpics'] = implode(',', Q('post.gdpics',array()));
		$detailModel->data['goods_gid'] = $num;	
		//给详情表里加入数据
		$detailModel->add();		
		//3.给商品属性表里添加数据
		//将提交过来的数组中的规格数组接收到循环遍历将相应的值压入
		//商品属性表         $num是商品表主键
		//				$k是就是类型属性表主键，记录此规格值属于那个类型属性比如四核双核属于处理器
		//				$vv就是类型属性值，此时就是四核双核
		//是规格的时候
		foreach (Q('post.spec',array()) as $k => $v){
			foreach ($v['value'] as $kk => $vv) {
				$add = array(
					'gvalues'      => $vv,
					'addprice'     => $v['price'][$kk],
					'typeattr_tid' => $k,
					'goods_gid'    => $num
				);
				$attrModel->add($add);				
			}
		}	

		//是时属性的时候
		foreach (Q('post.attr',array()) as $key => $value) {
			$ad = array(
					'gvalues'      => $value,
					'addprice'     => 0,
					'typeattr_tid' => $key,
					'goods_gid'    => $num
				);
				$attrModel->add($ad);	
		}
		return true;
		
		
	}
	//编辑方法
	public function edit(){
		$gid = Q('post.gid',0,'intval');
	  	if(!$this->create()) return false;
		//2.验证商品详情表里的商品详情和商品服务是否通过
		//实例化商品详情表
		$detailModel = new \Common\Model\Goodsdetail;
		if(!$detailModel->create()){
			//若验证不通过，把当前错误压入当前模型
			$this->error = $detailModel->getError();
			return false;
		}		
		//3.验证商品属性表里的商品属性值是否通过验证
		//实例化商品属性表
		$attrModel = new \Common\Model\Goodsattr;
		//若验证不通过，把当前错误压入当前模型
		if(!$attrModel->create()){
			$this->error = $attrModel->getError();
//			return false;
		}
		//1.给商品表添加数据，如果以上验证全部通过,返回商品自增主键（真值）
		//根据提交过来的category_cid找到category表里的type_typid就找到了type表里的同一批的typid;
		$cid = Q('post.category_cid',0,'intval');
		
		//找到category表里的type_typid
		$typid = Db::table('category')->where("cid={$cid}")->pluck('type_typid');
		//压入数组
		$this->data['type_typid'] = $typid;
		//添加到数据库，返回自增主键
		$this->save(); 

		//2.给商品详情表添加数据		
	
		//将多图的数组路径转化为字符串压入相应的商品详情数据的数组里然后执行添加
		$detailModel->data['gdpics'] = implode(',', Q('post.gdpics',array()));
		$detailModel->data['goods_gid'] = $gid;	
		//给详情表里加入数据
		$detailModel->where("goods_gid={$gid}")->save();		
		//3.给商品属性表里添加数据
		//将提交过来的数组中的规格数组接收到循环遍历将相应的值压入
		$attrModel->where("goods_gid={$gid}")->delete();
		//是规格的时候
		
		foreach (Q('post.spec',array()) as $k => $v){
			foreach ($v['value'] as $kk => $vv) {
				if(!empty($vv)){
						$add = array(
						'gvalues'      => $vv,
						'addprice'     => $v['price'][$kk],
						'typeattr_tid' => $k,
						'goods_gid'    => $gid,
					);
				}
				$attrModel->add($add);				
			}
		}	

		//是时属性的时候
		foreach (Q('post.attr',array()) as $key => $value) {
				if(!empty($value)){
						$ad = array(
						'gvalues'      => $value,
						'addprice'     => 0,
						'typeattr_tid' => $key,
						'goods_gid'    => $gid,
					);
				}
				$attrModel->add($ad);	
		}
		return true;
	   
	}
	
	
}	
	
	
	
	